package version1;

import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Collection;
import java.util.Properties;



/*版本1--封装【拓展】
* Mysql工具类
* 1.数据库：地址，用户名，密码，私有属性---静态化【本类直接调用】
* Oracle与MySQL同时具备--地址，用户名，密码
* 2.静态方法【本类直接调用】getParam(String 外置文件路径)
* 目的：使用方法调用外部文件   db_mysql.properties
* db_mysql.properties     对应   Java Properties类：读取键值对形式信息
* Properties类  提供方法  load（）  读取配置文件信息【键值对-数据库基本信息】
* 3.通过封装的概念--链接成功数据库【通用一个类链接MySQL和Oracle】
* */
public class Mysql {
    //1.任何数据库具备：地址，用户名，密码--私有静态属性
    private static String url;
    private static String username;
    private static String password;
    //2.静态方法：getParam(String 路径)------链接数据库--读取信息
    //2.1配置文件：键值对出现，保存数据库对应的基本信息   xxx.properties
    public static void getParam(String fileName) throws IOException {
    //2.2Properties类--读取xxx.properties配置文件信息
        Properties p=new Properties();
        //2.3 外置文件读取--借助IO--搬运数据---InputStream
        // Mysql.class  表示当前MySQL类的Class对象
        //理解：图书馆--区域存MySQL相关书籍
        //getClassLoader()  获取当前类的加载器【加载器负责读取配置文件信息】
        //理解：图书馆--区域存MySQL相关书籍--图书管理员
        //getResourceAsStream(文件)  获取当前加载器中键值对信息
        //理解：图书馆--区域存MySQL相关书籍--图书管理员--拿明确的书籍
        InputStream fis=
  Mysql.class.getClassLoader().getResourceAsStream(fileName);
        p.load(fis);
    //2.4  读取数据库基本信息【url，用户，密码】赋值给当前对象【url,用户，密码】
        //Properties类--提供方法 getProperty()读取db_mysql.properties中键
        url=p.getProperty("url");
        username=p.getProperty("username");
        password=p.getProperty("password");
        System.out.println("测试连接成功："+url+username+password);
    }

    public static void main(String[] args) throws IOException, SQLException {
        //测试封装概念--链接成功数据库
        Mysql.getParam("db_mysql.properties");
        //参考Mysql封装，写Oracle封装
        //练习：链接成功Mysql-----book表---增加一条记录操作
        //1.创建链接---Connection  代表Java链接成功数据库
        Connection con=DriverManager.getConnection(url,username,password);
        //2.执行sql---Statement--Connection  代表Java执行数据  sql
        Statement st=con.createStatement();
        //3.【CRUD操作：增删改  executeUpdate()  查 executeQuery】
      //  String sql="insert into book values(6,'余华','活着',79,'2010年',80,'否')";
       //练习：删和改【改sql】--查【参考：OracleJDBC查询方案】
        //int rows=st.executeUpdate(sql);  //执行增删改，返回int类型
      //  System.out.println("成功添加了："+rows+"一条记录");
        //删除
        // String sql="delete from book where id=6";
        // int rows=st.executeUpdate(sql);
        //  System.out.println("成功删除了："+rows+"一条记录");
        //修改
       // String sql="update book set author='余' where id=7";
       // int rows=st.executeUpdate(sql);
       // System.out.println("成功修改了："+rows+"一条记录");
        //查询
        String sql="select * from book where id=7";
        ResultSet rows=st.executeQuery(sql);
        int count=0;
        while (rows.next()){
            int id=rows.getInt("id");
            String author=rows.getString("author");
            String name=rows.getString("name");
            int price=rows.getInt("price");
            String date=rows.getString("date");
            String number=rows.getString("number");
            String discount=rows.getString("discount");
            System.out.println("序号："+id+"作者："+author+"名字"+name+"价格"+price+"时间"+date+"数量"+number+"打折情况"+discount);
        }
        System.out.println("成功查询了："+rows+"一条记录");
        //4.关闭链接---Statement--Connection
        st.close();  con.close();
    }
    }
